#ifndef _XLX_WAKEUP_SAVE_H_
#define _XLX_WAKEUP_SAVE_H_

/*
* file: tutu_wakeup_save.h
*/

/*
* 开机记录唤醒源，并保存到nvRam中，作为日志用于分析

*/

#define DATETIME_MIN                        1712538396      // 最小时间戳，2024-04-08 09:06:36
#define LAST_WAKEUP_RECORD_MAX              360              // 记录历史开机次数、原因、时间


typedef struct _wakeup_data
{
    unsigned char ap_reset_state;           // ap复位
    unsigned char cp_reset_state;           // cp复位
    unsigned char wakeup_source;            // 唤醒源
    int ap_version;                         // xlx软件版本
    unsigned char ap_checksum[11];          // 软件版本校验码
    unsigned long datetime;                 // 时间

} wake_data_t;

typedef struct _WAKEUP_RECORD {
    unsigned int total;             // 历史开机统计
    unsigned int last_count;        // 最后次数，最大为LAST_WAKEUP_RECORD_MAX
    unsigned int last_id;              // 指向最后一个
    wake_data_t wakeup_list[LAST_WAKEUP_RECORD_MAX];    // 所有唤醒的历史数据    
} wakeup_record_t;

extern wake_data_t g_curret_wakeup_src;    // 本次唤醒源数据
extern wakeup_record_t g_sys_wakeup_src;   // 系统开机原因

void wakup_src_add(wakeup_record_t *rec, wake_data_t *dat);
void update_last_datetime_and_save(wakeup_record_t *rec, unsigned long dtime);
void tutu_save_wakeup_src_cfg();        // 保存唤醒源数据到文件
void tutu_load_wakeup_src_cfg(); // 加载唤醒源数据到文件
void show_all_wakeup_src(unsigned int start_id, unsigned int rec_count);
void get_all_wakeup_src_data(unsigned int start_id, unsigned int rec_count, char * ret_buff);
void clear_all_wakeup_data(void);
void show_queue_wakeup_src(void);
#endif
